using System;
using Telerik.OpenAccess;
using Telerik.OpenAccess.Metadata;

namespace LINQPad.OpenAccess.Metadata
{
    /// <summary>
    /// Context type info interface.
    /// </summary>
    public interface IContextTypeInfo
    {
        /// <summary>
        /// Gets the type of the context.
        /// </summary>
        /// <value>
        /// The type of the context.
        /// </value>
        Type ContextType { get; }
        /// <summary>
        /// Gets the default backend configuration.
        /// </summary>
        /// <value>
        /// The default backend configuration.
        /// </value>
        BackendConfiguration DefaultBackendConfiguration { get; }
        /// <summary>
        /// Gets the default metadata source.
        /// </summary>
        /// <value>
        /// The default metadata source.
        /// </value>
        MetadataSource DefaultMetadataSource { get; }
        /// <summary>
        /// Gets a value indicating whether the context type provides a custom constructor.
        /// </summary>
        /// <value>
        /// <c>true</c> if the context type provides a custom constructor; otherwise, <c>false</c>.
        /// </value>
        bool HasCustomConstructor { get; }
        /// <summary>
        /// Gets a value indicating whether the context type provides a default constructor.
        /// </summary>
        /// <value>
        /// <c>true</c> if the context type provides a default constructor; otherwise, <c>false</c>.
        /// </value>
        bool HasDefaultConstructor { get; }
        /// <summary>
        /// Gets the type of the context mapping definition.
        /// </summary>
        /// <value>
        /// The type of the context mapping definition.
        /// </value>
        MappingDefinitionType? MappingType { get; }
        /// <summary>
        /// Gets the name.
        /// </summary>
        /// <value>
        /// The name.
        /// </value>
        string Name { get; }
    }
}